#include <iostream>
#include <pthread.h>
#include <unistd.h>

using namespace std;
void* threadRun(void* arg)
{
    while (true)
    {
        cout << (char*)arg << "执行任务......" << endl;
        sleep(1);
    }
    return nullptr;
}

int main()
{
    pthread_t tid;
    pthread_create(&tid, nullptr, threadRun, (void*)"新线程");
    cout << tid << endl;
    return 0;
}

// void* threadRun1(void* arg)
// {
//     // 线程1调度函数
//     int count = 5;
//     while (true)
//     {
//         cout << (char*)arg << "执行任务......" << endl;
//         --count;
//         sleep(1);
//         if (0 == count) 
//         {
//             cout << (char*)arg << "线程退出" << endl;
//             pthread_exit((void*)1);  // 终止此线程，并且返回1
//         }
//     }
//     return nullptr;
// }

// void* threadRun2(void* arg)
// {
//     // 线程2调度函数
//     while (true)
//     {
//         cout << (char*)arg << "执行任务......" << endl;
//         sleep(1);
//     }
//     return nullptr;
// }


// int main()
// {
//     // 2 创建两个线程，其中一个线程使用线程exit，等待成功后主线程取消另一个线程，等待接收信息
//     pthread_t tid1, tid2;
//     // 创建两个线程
//     pthread_create(&tid1, nullptr, threadRun1, (void*)"thread-1");
//     pthread_create(&tid2, nullptr, threadRun2, (void*)"thread-2");

//     void* flag;
//     pthread_join(tid1, &flag);  // 阻塞等待线程1，flag接收返回值
//     cout << "线程1退出,返回值为" << (long long)flag << " 等待3秒后取消线程2" << endl;  // flag是指针变量，由于是x64-所以指针变量大小为八字节 1
//     sleep(3);
//     pthread_cancel(tid2);  // 主线程取消线程2
//     pthread_join(tid2, &flag);
//     cout << "线程2退出,返回值为" << (long long)flag << endl;  // -1

//     return 0;
// }

// void* threadRun(void* argc)
// {
//     int count = 10;
//     while (true)
//     {
//         cout << "新线程执行自己的任务中......" << endl;
//         sleep(1);
//         --count;
//         if (count == 0)
//         {
//             // 执行空指针引用触发信号
//             int* tmp = nullptr;
//             *tmp = 6;
//         }
//     }
//     return nullptr;
// }

// int main()
// {
//     // 1 创建一个线程，线程中发生异常中断
//     pthread_t tid;
//     pthread_create(&tid, nullptr, threadRun, nullptr);

//     // 主线程自己完成自己的事情
//     while (true)
//     {
//         cout << "主线程执行自己的任务中......" << endl;
//         sleep(1);
//     }
//     return 0;
// }